#ifndef PLUGINMANAGE_H
#define PLUGINMANAGE_H

#include <QObject>
#include <plugininterface.h>


class PluginManage : public QObject
{
    Q_OBJECT
public:
    explicit PluginManage(QObject *parent = nullptr);

    //插件文件级别操作
    void setPluginRootPath(QString dir);            //设置插件根目录
    QString getPluginRootPath();                    //获取插件根目录

    QStringList findPlugin(QString dir);            //发现插件
    bool addPlugin(const QString &filePath);        //添加插件
    bool removePlugin(const QString &filePath);     //删除插件
    bool removeAllPlugin();                         //清空插件

    //插件对象实例化级别操作
    bool loadPlugin(const QString &filePath);       //加载插件
    void loadAllPlugin();
    bool unloadPluin(const QString &filePath);      //卸载插件
    void unloadAllPlugin();
    bool isLoaded(const QString &filePath);         //判断插件是否加载

    PluginInterface* getPlugin(const QString &filePath);
    QHash<QString, PluginInterface*> getAllPlugin();

signals:
    void sigLoadPlugin(PluginInterface* plugin);
    void sigUnloadPlugin(PluginInterface* plugin);

private:
    QString mPluginDir;
    QHash<QString, PluginInterface*> mPluginHash;  //插件路径(dll名字)：插件实例化对象

};

#endif // PLUGINMANAGE_H
